package com.zzxu.androiddemo01.program.calculator;

import android.health.connect.datatypes.units.Length;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import com.zzxu.androiddemo01.R;

import org.w3c.dom.Text;


public class CalculatorMainActivity extends AppCompatActivity implements View.OnClickListener {

    private TextView tv_result;
    private String num1 = "";//第一个操作数
    private String operator = "";//运算符
    private String num2 = "";//第二个操作数
    private String showtext = "";//显示文本
    private String result = "";//计算结果


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_calculator_main);
        //获取文本视图，也就是计算器的显示框
        tv_result = findViewById(R.id.calculator_result_view);
        //给每个控件设置事件监听，因为都是使用一个监听器，所以不用初始化专门的对象了
        findViewById(R.id.btn_cancel).setOnClickListener(this);//清除当前输入
        findViewById(R.id.btn_division).setOnClickListener(this);//除法
        findViewById(R.id.btn_multiplication).setOnClickListener(this);//乘法
        findViewById(R.id.btn_delete).setOnClickListener(this);//全部删除
        findViewById(R.id.btn_seven).setOnClickListener(this);//7
        findViewById(R.id.btn_eight).setOnClickListener(this);//8
        findViewById(R.id.btn_nine).setOnClickListener(this);//9
        findViewById(R.id.btn_Addition).setOnClickListener(this);//加法
        findViewById(R.id.btn_four).setOnClickListener(this);//4
        findViewById(R.id.btn_five).setOnClickListener(this);//5
        findViewById(R.id.btn_six).setOnClickListener(this);//6
        findViewById(R.id.btn_subtraction).setOnClickListener(this);//减法
        findViewById(R.id.btn_one).setOnClickListener(this);//1
        findViewById(R.id.btn_two).setOnClickListener(this);//2
        findViewById(R.id.btn_three).setOnClickListener(this);//3
        findViewById(R.id.ib_sqrt).setOnClickListener(this);//开根号
        findViewById(R.id.btn_reciprocal).setOnClickListener(this);//取倒数
        findViewById(R.id.btn_zero).setOnClickListener(this);//0
        findViewById(R.id.btn_point).setOnClickListener(this);//小数点
        findViewById(R.id.btn_amount).setOnClickListener(this);//等于号
    }

    @Override
    public void onClick(View v) {
        String inputText;
        if (v.getId() == R.id.ib_sqrt) {
            inputText = "√";
        } else {
            inputText = (((TextView) v)).getText().toString();
        }
        switch (v.getId()) {
            case R.id.btn_cancel://清除当前输入
                break;

            case R.id.btn_division://除
            case R.id.btn_multiplication://乘
            case R.id.btn_Addition://加
            case R.id.btn_subtraction://减
                operator = inputText;
                refreshShowText(showtext + inputText);
                break;

            case R.id.btn_delete://全部删除\
                refreshOperator("");
                clear();
                break;

            case R.id.ib_sqrt://开根号
                double sqrt_result=Math.sqrt(Double.parseDouble(num1));
                refreshOperator(String.valueOf(sqrt_result));
                refreshShowText(showtext+"√="+result);
                break;

            case R.id.btn_reciprocal://取倒数
                double reciprocal_result=1.0/Double.parseDouble(num1) ;
                refreshOperator(String.valueOf(reciprocal_result));
                refreshShowText(showtext+"/="+result);
                break;

            case R.id.btn_amount://等号
                double calculator_result = calculatorFour();
                refreshOperator(String.valueOf(calculator_result));
                refreshShowText(showtext+"="+result);
                break;

            default:
//                if(result.length()>0 && operator.equals("")){
//                    clear();
//                }
                if (operator.equals("")) {
                    num1 = num1 + inputText;
                } else {
                    num2 = num2 + inputText;
                }
                //现在无法实现输入小数,点击小数点后，会清除0然后显示一个小数点
                if (showtext.equals("0") && !showtext.equals(".")) {
                    refreshShowText(inputText);//只显示新输入的文本
                } else {
                    refreshShowText(showtext + inputText);//显示之前输入和新输入的文本
                }
                break;
        }
    }
//四则运算
    private double calculatorFour() {
        switch (operator) {
            case "x":
                return Double.parseDouble(num1) * Double.parseDouble(num2);
            case "+":
                return Double.parseDouble(num1) + Double.parseDouble(num2);
            case "-":
                return Double.parseDouble(num1) - Double.parseDouble(num2);
            default:
                return Double.parseDouble(num1) / Double.parseDouble(num2);
        }
    }
//刷新运算符
    private void refreshOperator(String new_result) {
        result = new_result;
        num1 = result;
        num2 = "";
        operator = "";
    }
//清除全部
    private void clear() {
        refreshShowText("");
    }

//刷新显示文本
    private void refreshShowText(String text) {
        showtext = text;
        tv_result.setText(showtext);
    }
}